<script lang="ts" setup>
import { reactive, onMounted } from 'vue'
// 引入 echarts 图表组件库，用于在 Vue 中渲染图表
import { VueEcharts } from 'vue3-echarts'
type EChartsOption = /*unresolved*/ any

/**
 * 定义饼图配置对象，展示在职员工性别比例信息。
 * 包含标题、提示框、图例以及数据系列等配置项。
 */
const pieChar: EChartsOption = reactive(
    {
      title: {
        text: '在职员工性别比例' // 设置图表标题文本
      },
      tooltip: {
        trigger: 'item' // 提示框触发方式为数据项图形
      },
      legend: {
        top: '7%',       // 图例距离容器顶部
        left: 'center'   // 图例水平居中显示
      },
      series: [
        {
          name: 'Access From',
          type: 'pie',                    // 图表类型为饼图
          radius: ['40%', '70%'],         // 饼图环形半径（内圆40%，外圆70%）
          avoidLabelOverlap: false,       // 是否启用防止标签重叠策略
          itemStyle: {
            borderRadius: 10,             // 扇区圆角大小
            borderColor: '#fff',          // 扇区间分割线颜色
            borderWidth: 2                // 分割线宽度
          },
          label: {
            show: false,                  // 默认不显示标签文字
            position: 'center'            // 标签位置为中心点
          },
          emphasis: {
            label: {
              show: true,                 // 高亮时显示中心标签
              fontSize: 40,               // 字体大小
              fontWeight: 'bold'          // 加粗字体
            }
          },
          labelLine: {
            show: false                   // 不显示引导线
          },
          data: [
            { value: 580, name: '男性' },  // 数据项：男性人数及名称
            { value: 346, name: '女性' },  // 数据项：女性人数及名称
            { value: 300, name: '未知' }   // 数据项：未标明性别人数及名称
          ]
        }
      ]
    }
)

/**
 * 定义柱状图配置对象，展示在职员工学历分布情况。
 * 包括坐标轴设置与数据系列定义。
 */
const columnChar: EChartsOption = reactive(
    {
      title: {
        text: '在职员工学历分布' // 设置图表标题文本
      },
      xAxis: {
        type: 'category',               // X 轴类型为类目轴
        data: ['大专', '本科', '研究生', '博士', '未知'], // 类目数据列表
        axisLabel: {
          show: true,                   // 显示坐标轴刻度标签
          rotate: 0,                    // 刻度标签旋转角度为0
          fontSize: 12                  // 字体大小
        }
      },
      yAxis: {
        type: 'value',                  // Y 轴类型为数值轴
        axisLabel: {
          show: true,                   // 显示坐标轴刻度标签
          rotate: 0,                    // 刻度标签旋转角度为0
          fontSize: 12                  // 字体大小
        }
      },
      series: [
        {
          data: [120, 200, 150, 80, 70], // 各学历层级对应的数量
          type: 'bar'                    // 图表类型为柱状图
        }
      ]
    }
)

/**
 * 定义表格数据数组，存储最近生日人员的信息。
 * 每个元素代表一个员工的基本资料。
 */
const stst = reactive(
    [
      {
        id: 1,                          // 员工唯一标识符
        img: 'src/assets/tx1.jpg',     // 头像图片路径
        name: '小明',                   // 员工姓名
        date: '06-09',                 // 生日日期（月-日格式）
      },
      {
        id: 2,
        img: 'src/assets/tx2.jpg',
        name: '小华',
        date: '08-08',
      },
      {
        id: 3,
        img: 'src/assets/tx3.jpg',
        name: '小红',
        date: '12-12',
      }
    ]
)
onMounted(() => {
// 在这里可以进行初始化操作，但不需要重新定义变量
/*   // 从API获取实时数据来更新图表
     fetchEmployeeData()
  // 设置定时更新数据
     setInterval(() => {
       updateChartData()
     }, 30000) // 每30秒更新一次
  window.addEventListener('resize', handleResize)*/
})
</script>

<!-- 概况页面模板部分 -->
<template>
  <div class="container">
    <!-- 使用 Element Plus 的栅格系统布局卡片区域 -->
    <el-row :gutter="20">
      <!-- 最近生日人员卡片 -->
      <el-col :xs="24" :sm="24" :md="8" class="card-col">
        <el-card class="box-card">
          <div class="div_1">
            <div class="div_2">
              <span>最近生日人员</span>
            </div>
            <!-- 循环遍历员工数据并展示头像和基本信息 -->
            <div class="div_2_1">
              <div class="div_3" v-for="a in stst" :key="a.id">
                <div class="div_3_1">
                  <img class="img1" :src="a.img" :alt="a.name"/>
                </div>
                <div class="info-wrapper">
                  <span class="name">{{ a.name }}</span>
                  <span class="date">{{ a.date }}</span>
                </div>
              </div>
            </div>
          </div>
        </el-card>
      </el-col>
      
      <!-- 合同到期人员卡片 -->
      <el-col :xs="24" :sm="24" :md="8" class="card-col">
        <el-card class="box-card">
          <div class="div_1">
            <div class="div_2">
              <span>合同到期人员</span>
            </div>
            <!-- 展示合同即将到期的员工信息 -->
            <div class="div_2_1">
              <div class="div_3" v-for="a in stst" :key="a.id">
                <div class="div_3_1">
                  <img class="img1" :src="a.img" :alt="a.name"/>
                </div>
                <div class="info-wrapper">
                  <span class="name">{{ a.name }}</span>
                  <span class="date">{{ a.date }}</span>
                </div>
              </div>
            </div>
          </div>
        </el-card>
      </el-col>
      
      <!-- 试用期结束人员卡片 -->
      <el-col :xs="24" :sm="24" :md="8" class="card-col">
        <el-card class="box-card">
          <div class="div_1">
            <div class="div_2">
              <span>试用到期人员</span>
            </div>
            <!-- 展示处于试用期且将要转正的员工信息 -->
            <div class="div_2_1">
              <div class="div_3" v-for="a in stst" :key="a.id">
                <div class="div_3_1">
                  <img class="img1" :src="a.img" :alt="a.name"/>
                </div>
                <div class="info-wrapper">
                  <span class="name">{{ a.name }}</span>
                  <span class="date">{{ a.date }}</span>
                </div>
              </div>
            </div>
          </div>
        </el-card>
      </el-col>
      
      <!-- 性别比例饼图卡片 -->
      <el-col :xs="24" :sm="24" :md="10" class="card-col">
        <el-card shadow="always" class="chart-card">
          <div>
            <!-- 渲染 ECharts 饼图组件 -->
            <vue-echarts :option="pieChar" class="chart-container" />
          </div>
        </el-card>
      </el-col>
      
      <!-- 学历分布柱状图卡片 -->
      <el-col :xs="24" :sm="24" :md="14" class="card-col">
        <el-card shadow="always" class="chart-card">
          <div>
            <!-- 渲染 ECharts 柱状图组件 -->
            <vue-echarts :option="columnChar" class="chart-container" />
          </div>
        </el-card>
      </el-col>
    </el-row>
  </div>
</template>

<style scoped>
.div_1 {
  height: 300px;
  width: 100%;
}

.div_2 {
  height: 40px;
  line-height: 40px;
  border-bottom: 1px solid #ddd;
  font-weight: 700;
  font-size: 18px;
}

.div_2_1 {
  background-color: rgb(245, 247, 250);
  height: 240px;
  padding-top: 5px;
  margin-top: 10px;
  border-radius: 10px;
  overflow-y: auto;
}

.div_3 {
  height: 40px;
  line-height: 40px;
  background-color: white;
  padding: 0  10px;
  border-bottom: 1px solid #eee;
  display: flex;
  align-items: center;
}

.info-wrapper {
  display: flex;
  justify-content: space-between;
  width: calc(100% - 50px);
  font-size: 14px;
}

.img1 {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  object-fit: cover;
}

.div_3_1 {
  height: 40px;
  width: 40px;
  margin-right: 12px;
  flex-shrink: 0;
}

/* 平板设备适配样式 */
@media (max-width: 1024px) {
  .div_1 {
    height: 280px;
  }
  .div_2_1 {
    height: 220px;
  }
}

/* 手机设备适配样式 */
@media (max-width: 768px) {
  .div_2 {
    font-size: 16px;
    height: 36px;
    line-height: 36px;
  }

  .info-wrapper {
    font-size: 13px;
  }
}

@media (max-width: 480px) {
  .div_1{
    height: 240px;
  }
  .div_2{
    height: 32px;
    font-size: 15px;
    line-height: 32px;
  }
  .div_2_1{
    height: 190px;
    padding: 5px 0;
  }
  .div_3{
    height: 36px;
    line-height: 36px;
    padding: 0 8px;
  }
  .img1{
    width: 32px;
    height: 32px;
  }
  .div_3_1{
    width: 32px;
    height: 32px;
  }
  .info-wrapper{
    font-size: 12px;
    width: calc(100% - 40px);
  }
}
</style>
